import * as Cesium from "cesium";
/**
 * cesium 中 viewer.entities 加入集合， 因此二次封装一个类去管理所有的实体
 */
export default class CesiumEntityCollection {
  constructor(viewer, markId) {
    this.viewer = viewer;
    this.markId = markId;
    this.list = []; // 存入每次绘制的集合
  }
  /**
   * 新增一系列实体，每次新增都是一个集合，通过id 去管理集合
   * @param {*} entityList
   * @param {*} id
   */
  add(entity, id) {
    if (!id) {
      throw new Error(" add 方法必须传入id");
    }
    const addObj = this.list.find((item) => item.id === id);
    if (addObj) {
      addObj.collection.add(entity);
      this.viewer.entities.add(entity);
    } else {
      const collection = new Cesium.EntityCollection();
      collection.add(entity);
      this.viewer.entities.add(entity);
      this.list.push({
        collection: collection, // 集合
        id: id,
      });
    }
  }
  /**
   * 通过id 删除实体集合
   * @param {* } id
   */
  remove(id) {
    if (!id) {
      throw new Error("remove 方法必须传入id");
    }
    const _this = this;
    const removeObj = this.list.find((item) => item.id === id);
    if (removeObj) {
      // 删除集合所有实体
      removeObj.collection.values.forEach((entity) => {
        _this.viewer.entities.remove(entity);
      });
      // 删除list 记录
      _this.list = _this.list.filter((item) => item.id !== id);
    } else {
      throw new Error(`未能找到id:${id}`);
    }
  }
  /**
   * 清空全部集合
   */
  removeAll() {
    const _this = this;
    // 删除实体
    this.list.forEach((item) => {
      item.collection.values.forEach((entity) => {
        _this.viewer.entities.remove(entity);
      });
    });
    // 删除list
    this.list = [];
  }
  // 获取所有实体
  getAll() {
    const entities = [];
    this.list.forEach((item) => {
      item.collection.values.forEach((entity) => {
        entities.push(entity);
      });
    });
    return this.list
    // return entities;
  }
}
